home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 43.zip
/
Sources C- WorkDisk V.adf
/
ex
/
checkdisk2.c
< prev
next >
Wrap
C/C++ Source or Header
|
1987-02-16
|
2KB
|
83 lines
/* checkdisk.c */
#include "devices/trackdisk.h"
#define BLOCKSIZE TD_SECTOR
#define MEMF_CHIP (1L<<1)
unsigned char *diskbuffer;
long td_open_error = -1;
struct MsgPort *diskport;
struct IOExtTD *diskreq;
extern struct MsgPort *CreatePort();
extern struct IORequest *CreateExtIO();
void MotorOnOff(onoff) /* TURN DISK MOTOR ON/OFF */
long onoff;
{
diskreq->iotd_Req.io_Length = onoff;
diskreq->iotd_Req.io_Command = TD_MOTOR;
DoIO(diskreq);
}
main(argc,argv)
int argc;
char *argv[];
{
long unit, offset;
if (argc>1)
{
unit = atoi(argv[1]);
if( unit < 0 || unit > 3) exit(0);
}
else
unit = 1;
if((diskbuffer = AllocMem(BLOCKSIZE,MEMF_CHIP))==0) cleanup();
if((diskport = CreatePort(0,0)) == 0) cleanup();
/* make an io request block for communicating with the disk */
if((diskreq = (struct IOExtTD *)CreateExtIO(diskport, sizeof(struct IOExtTD)))== 0)
cleanup();
if(td_open_error = OpenDevice(TD_NAME,unit,diskreq,0)) cleanup();
MotorOnOff(1); /* Motor On */
for(offset=0;offset<NUMSECS*NUMCYLS*NUMHEADS*BLOCKSIZE;offset+=BLOCKSIZE)
{
diskreq->iotd_Req.io_Flags = 0;
diskreq->iotd_Req.io_Length = BLOCKSIZE;
diskreq->iotd_Req.io_Data = (APTR)diskbuffer;
diskreq->iotd_Req.io_Offset = offset; /* type long */
diskreq->iotd_Req.io_Command = ETD_READ;
/* check that disk not changed before reading */
diskreq->iotd_Count = 0xFFFFFFFF;
diskreq->iotd_SecLabel = 0;
DoIO(diskreq);
if(diskreq->iotd_Req.io_Error != 0)
printf("\nError nr. Error=%ld at Cyl=%ld.",
diskreq->iotd_Req.io_Error,offset/(NUMSECS*NUMHEADS*BLOCKSIZE));
}
MotorOnOff(0);
cleanup();
} /* end of main */
cleanup()
{
if(diskbuffer) FreeMem(diskbuffer,BLOCKSIZE);
if(!td_open_error) CloseDevice(diskreq);
if(diskreq) DeleteExtIO(diskreq, sizeof(struct IOExtTD));
if(diskport) DeletePort(diskport);
exit(0);
}